草庐IT

c++ tcp多线程

全部标签

c++ - WINAPI - 我想在一个单独的线程中进行消息泵

在WindowsAPI中,制作一个窗口需要一个消息泵来保持窗口运行和更新。现在,写一个消息泵由一个while循环组成,它控制了整个程序,不允许执行其他事情,这是一个大问题。考虑我的代码,它是一个头文件,我称之为CFrame.h(因为在里面我创建了一个名为CFrame的类,它旨在模仿JFrame在Java中)。换句话说,我希望可以创建CFrame的多个实例,以便显示多个窗口,并且消息循环不会在创建第一个窗口后停止窗口。我为函数ThreadExecution()创建了一个新线程,由于某种原因程序刚刚终止,为什么?#defineUNICODE#includeconstwchar_tCLASS

c++ - 在 C 窗口中将参数传递给线程的最佳方法是什么?

嗨我有一个使用几个变量的线程。变量在运行时由argv[]确定。我的选择:使变量成为全局变量,以便线程可以使用它们(不需要保护它们,因为线程不会更改它们)。我不太愿意使用它,因为全局变量不是很好创建一个结构来保存变量并将其传递给线程。varibales并没有真正相关,因此它将是一个“强制”结构,除了线程的参数之外没有任何意义。而且,比选项1更复杂还有其他选择吗?哪个更好?谢谢! 最佳答案 itwouldbea"forced"structwithnomeaningotherthanargumentforthethread这听起来像是对结

c++ - 给定线程 ID,如何确定它是否仍在 Windows 上运行

在Linux上,我们有pthread_kill()来执行此操作。我正在尝试为它找到Windows对应项。换句话说,给定一个线程id,有没有办法判断线程是否还在运行?GetExitCodeThread()是我发现的最接近的方法,但是,它需要线程句柄而不是线程ID作为其参数。 最佳答案 您不应该为此目的使用线程ID:线程ID可以重复使用,因此如果您获得线程ID,则该线程退出,另一个线程可以使用相同的线程ID启动。句柄不存在这个问题:一旦一个线程终止,该线程的所有句柄都会反射(reflect)该线程的终止状态。您可以使用OpenThrea

c# - 如何终止在 C# 中的 foreach 循环中启动的线程

我在Windows服务中为每个循环启动了多个线程。我没有为这些线程提及任何名称。我如何终止这些线程。我使用以下代码创建线程。newThread(()=>{foreach(MyClassdetailinMyclassList){DoWork(detail);}}).Start();通过启动这些线程,我为每个细节创建了一个计划任务。我可以在计划完成后处理这个线程吗?如何处理? 最佳答案 强行终止线程绝不是个好主意。您真正应该做的是在循环内放置一些经过适当设计的“我应该继续”检查,您可以在外部将其设置为“否”。如何做到这一点更多地取决于上

.net - 线程是否可以在临界区中间被抢占?

是否可以通过在Windows中禁用中断来实现临界区锁定?如果是这种情况,则当线程处于临界区中间时,它不能被抢占。但如果是这种情况,即如果一个线程在执行关键部分时不能被抢占,那将使得脉冲监视器的整个点不如如果即使线程处于关键部分的中间,也可能会要求线程撤出CPU。所以,我真正的问题是:在Windows中如何实现监视器?线程处于临界区中间时是否可以被抢占? 最佳答案 Windows的设计使得线程,即使在内核模式下运行,arealwayspreemptibleandalwaysinterruptible.所以临界区肯定不是通过禁止中断来实

c++ - 使用 Windows api 和 C++,我如何从硬盘驱动器加载一个 exe 并在它自己的线程中运行它?

为了学习,我正在尝试做操作系统在启动程序时所做的事情,即。解析一个PE文件并给它一个执行线程。如果我有两个exe,一个叫foo.exe,另一个叫bar.exe,我如何让foo.exe将bar.exe的内容加载到内存中,然后让它在自己的线程中从那里执行?我知道如何使用MapViewOfFile或通过简单地将硬盘驱动器上的内容加载到缓冲区中来将其放入内存。我假设只是将磁盘上bar.exe的内容复制到它自己的挂起线程中并运行它是行不通的。我对PE文件的内部结构比较熟悉。当然,非常感谢所有帮助:) 最佳答案 首先,兰伯特是正确的。EXE在它

c - 当进程被终止时,有没有办法让线程从无限信号量等待中出来?

操作系统:Windows。语言:C我有一个线程通过TCP向服务器发送请求并在信号量上无限等待响应。还有另一个线程读取套接字,将接收到的数据复制到一个公共(public)缓冲区中,并使信号量发出脉冲以结束等待。这一切都很好。但在进程由于某种原因被终止的情况下,等待信号量的线程会一直等待,而其他线程将终止。为什么当进程被杀死时线程等待信号量没有结束?我在Linux论坛上读到有SEM_UNDO可以帮助解决这种情况。Windows上有类似的东西吗?任何解决方法? 最佳答案 Semaphoresdonothaveowners.如果您等待信号量

c# - 获取线程的可见窗口的标题

我想知道我将如何去做这件事,因为我已经尝试了无数不同的user32函数并在网上进行了相当广泛的研究,但不幸的是我还没有想出一个解决方案。有一个应用程序有5个线程。只要进程的PID,就可以通过.NETProcess类的GetProcessById方法轻松访问这些线程。但是,似乎没有可用于提供线程ID并枚举其窗口(父窗口或子窗口)的函数。其中一个线程共有10个窗口,其中9个隐藏,1个可见。该可见线程的标题是我试图以编程方式获得的。我最近的方法是获取进程句柄,将其放入EnumChildWindows,并尝试以这种方式将每个窗口句柄添加到一个集合中,但我的集合始终是空的。这是我在Process

windows - 线程 ID 是否总是适合四位十进制数?

我正在将日志语句写入文件,并希望在每一行前加上生成该语句的线程ID。似乎GetCurrentThreadId函数总是返回一个GetCurrentThreadId返回一个DWORD值,它显然可以包含大数字。谢谢。 最佳答案 GetCurrentThreadID的MSDN页面说:thethreadidentifieruniquelyidentifiesthethreadthroughoutthesystem.因此,线程ID在整个系统中都是唯一的,而不仅仅是您的进程,很有可能在某个时候返回一个大于4位十进制数的值。

c++ - 来自目标线程的 PostThreadMessage

今天,我看到了这样一段代码:voidFoo(){MyMsgStructmyMsg;/*omissionforsimplicity*//*sendtoupdatethread*/PostThreadMessage(myThreadId,myMessage,(WPARAM)myMsg,NULL);}当从与myThreadId相同的线程调用Foo()时会发生什么,即从应该是目标线程的相同线程调用?是性能问题还是只是糟糕的代码编写或两者兼而有之?我相信它可能会影响性能,因为我相信它会将消息排队到线程的队列中,而不是仅仅做它应该做的事情,因此会稍微减慢程序速度。线程安全不是我关心的问题对于这个问